import { createRouter, createWebHistory } from "vue-router";

// 动态导入路由组件
const modules = import.meta.glob("../views/**/*.vue");
// console.log('modules', modules)

// 动态导入路由配置
const configs: TObj = import.meta.glob("../views/**/pageConfig.ts", {
	eager: true,
});
// console.log('configs', configs)

// 存储生成的路由配置
const routeMap: TObj = {};

// 将导入的组件转换为路由配置
Object.keys(modules).forEach((key) => {
	// 获取路由配置文件的路径
	const pathParts = key.split("/");
	pathParts.pop(); // Remove the .vue file part
	const configPath = pathParts.join("/") + "/pageConfig.ts";

	// 获取对应的路由配置
	const config = configs[configPath]?.routeConfig;
	// 不存在 || 隐藏的路由 跳过
	if (!config || config.hide) return;

	// 构造路由对象
	const route = {
		path: config.path,
		name: config.name,
		icon: config.icon,
		component: modules[key], // 懒加载组件
	};

	console.log("处理路由配置:", key, configPath, config);

	if (config.parentPath) {
		// 如果有父级路由
		if (!routeMap[config.parentPath]) {
			routeMap[config.parentPath] = {
				path: config.parentPath,
				name: config.parentName,
				icon: config.icon,
				children: [],
			};
		}
		routeMap[config.parentPath].children.push(route);
		console.log("添加子路由:", route);
	} else {
		// 顶级路由
		routeMap[config.path] = route;
		console.log("添加顶级路由:", route);
	}
});

// 生成路由数组
const routes = Object.values(routeMap).map((route) => {
	if (route.children && route.children.length === 0) {
		delete route.children;
	}
	// 如果有子路由，确保它们被正确处理
	if (route.children && route.children.length > 0) {
		// 为父路由添加默认重定向到第一个子路由
		route.redirect = route.children[0].path;
	}
	return route;
});

console.log("最终生成的路由数组:", routes);

const router = createRouter({
	history: createWebHistory(import.meta.env.BASE_URL),
	routes: [
		...routes,
		{
			path: "/",
			redirect: "/daily",
		},
	],
});

// 添加全局路由守卫
router.beforeEach((to, from, next) => {
	console.log("导航到:", to);

	// 检查路由是否匹配
	const matched = routes.some(
		(route) => {
			// 检查顶级路由
			if (route.path === to.path) {
				return true;
			}
			
			// 检查子路由
			if (route.children) {
				return route.children.some((child: TObj) => {
					// 对于带参数的路由，需要特殊处理
					if (child.path && child.path.includes(':')) {
						// 简单的参数路由匹配检查
						const basePath = child.path.split('/:')[0];
						return to.path.startsWith(basePath);
					}
					return child.path === to.path;
				});
			}
			
			return false;
		}
	);

	console.log("路由匹配结果:", matched);
	console.log("所有路由:", routes);

	if (matched) {
		next();
	} else if (to.path === "/") {
		next("/daily");
	} else {
		// 路由不在范围之内的 跳转到首页
		console.log("未找到匹配路由，跳转到首页");
		next("/");
	}
});

export default router;
